// Copyright 2021 Datafuse Labs
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

use databend_common_expression::Scalar;

use crate::plans::ConstantExpr;
use crate::ScalarExpr;

pub fn is_true(predicate: &ScalarExpr) -> bool {
    matches!(
        predicate,
        ScalarExpr::ConstantExpr(ConstantExpr {
            value: Scalar::Boolean(true),
            ..
        })
    )
}

pub fn is_falsy(predicate: &ScalarExpr) -> bool {
    matches!(
        predicate,
        ScalarExpr::ConstantExpr(ConstantExpr {
            value,
            ..
        }) if value == &Scalar::Boolean(false) || value == &Scalar::Null
    )
}

pub fn false_constant() -> ScalarExpr {
    ConstantExpr {
        span: None,
        value: Scalar::Boolean(false),
    }
    .into()
}
